/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 文件名：	HFieldDateTime.java
 * 模块说明：	
 * 修改历史：
 * 2007-1-19 - lxm - 创建。
 */
package com.hd123.rumba.jsp;

import java.util.Date;

import com.hd123.rumba.request.Dictionary;
import com.hd123.rumba.runtime.FormatSettings;
import com.hd123.rumba.util.AccessMode;

/**
 * 日期+时间输入框 | 服务端界面控件
 * <p>
 * 
 * 页面模型：<br>
 * <table border=0 cellspacing=3 cellpadding=0>
 * <tr bgcolor=skyblue>
 * <td>界面元素</td>
 * <td>对象属性</td>
 * </tr>
 * <tr>
 * <td><code>&lt;td&gt;</code></td>
 * <td><i>tdLabel</i></td>
 * </tr>
 * <tr bgcolor=aliceblue>
 * <td><code>&nbsp;&nbsp;...</code></td>
 * <td>参见{@link LabelHField LabelHField}</td>
 * </tr>
 * <tr>
 * <td><code>&lt;td&gt;</code></td>
 * <td><i>tdContent</i></td>
 * </tr>
 * <tr bgcolor=aliceblue>
 * <td><code>&nbsp;&nbsp;&lt;input type=text&gt;</code></td>
 * <td><i>inputText</i></td>
 * </tr>
 * </table>
 * 
 * @author lxm
 * 
 */
public class HFieldDateTime extends HFieldText {

  public HFieldDateTime(Dictionary dd, String name, String caption, Date value, Object[] params) {
    super(dd, name, caption, value, params);
    initial();
  }

  public HFieldDateTime(Dictionary dd, String name, String caption, Date value) {
    super(dd, name, caption, value);
    initial();
  }

  /** precision取值。表示精确到分。 */
  public static final String VALUE_PRECISION_MINUTE = "RFieldDate.STYLE_DATETIME_YMDHM";
  /** precision取值。表示精确到秒。 */
  public static final String VALUE_PRECISION_SECOND = "RFieldDate.STYLE_DATETIME_YMDHMS";
  /** precision取值。表示精确到豪秒。 */
  public static final String VALUE_PRECISION_MILLISECOND = "RFieldDate.STYLE_DATETIME_YMDHMSZ";

  private String precision;

  /**
   * 属性：精度。取值范围参见常量“VALUE_PRECISION_*”。默认为秒。<br>
   * 对应的参数名"precision"，下一参数类型为String。
   */
  public String getPrecision() {
    return precision;
  }

  public void setPrecision(String precision) {
    this.precision = precision;

    if (VALUE_PRECISION_MINUTE.equals(this.precision))
      this.setValueFormat(FormatSettings.yMdHm);
    else if (VALUE_PRECISION_MILLISECOND.equals(this.precision))
      this.setValueFormat(FormatSettings.yMdHmsS);
    else
      this.setValueFormat(FormatSettings.yMdHms);
  }

  protected boolean readParam(String paramName, Object paramValue) {
    if (super.readParam(paramName, paramValue))
      return true;
    if ("precision".equals(paramName)) {
      this.precision = (String) paramValue;
      return true;
    }
    return false;
  }

  protected void buildHTML(int accessMode, int promptMode) {
    super.buildHTML(accessMode, promptMode);
    if (accessMode == AccessMode.READWRITE)
      this.getInputText().setClass("small_input");
    else
      this.getInputText().setClass("small_input_static");
  }

  protected String buildJS() {
    StringBuffer sb = new StringBuffer();
    sb.append("var ctrl = new RFieldDate();");
    if (this.getIsRequired().booleanValue())
      sb.append("ctrl.required = true;");
    sb.append("ctrl.setStyle(" + this.precision + ");");
    sb.append("ctrl.bind($('" + this.getName() + "'), $('" + this.getLabel().getAttribute("id") + "'));");
    return sb.toString();
  }

  private void initial() {
    if (this.precision == null)
      this.precision = VALUE_PRECISION_SECOND;
    this.setPrecision(this.precision);
  }
}
